libxc: osdep: convert xc_map_foreign_ranges()
authorIan Campbell <ian.campbell@citrix.com>
Fri, 3 Dec 2010 09:36:47 +0000 (09:36 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Fri, 3 Dec 2010 09:36:47 +0000 (09:36 +0000)
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson.citrix.com>
tools/libxc/xc_foreign_memory.c
tools/libxc/xc_linux.c
tools/libxc/xc_minios.c
tools/libxc/xc_netbsd.c
tools/libxc/xc_solaris.c
tools/libxc/xenctrlosdep.h

index 95d1d43c7807966ea5dcb9ea8324530d1bdb7021..907c02bd7ef3d00e95c9405006dc6c5183b0178c 100644 (file)
@@ -27,6 +27,14 @@ void *xc_map_foreign_range(xc_interface *xch, uint32_t dom,
                                                  dom, size, prot, mfn);
 }
 
+void *xc_map_foreign_ranges(xc_interface *xch, uint32_t dom,
+                            size_t size, int prot, size_t chunksize,
+                            privcmd_mmap_entry_t entries[], int nentries)
+{
+    return xch->ops->u.privcmd.map_foreign_ranges(xch, xch->ops_handle,
+                                                  dom, size, prot, chunksize, entries, nentries);
+}
+
 void *xc_map_foreign_batch(xc_interface *xch, uint32_t dom, int prot,
                            xen_pfn_t *arr, int num)
 {
index aa70cc8763533f2a37c88fe8a6d175f078dc6b29..d247c9c19391d214e22c949032763a2a1757ed05 100644 (file)
@@ -303,9 +303,10 @@ static void *linux_privcmd_map_foreign_range(xc_interface *xch, xc_osdep_handle
     return ret;
 }
 
-void *xc_map_foreign_ranges(xc_interface *xch, uint32_t dom, size_t size, int prot,
-                            size_t chunksize, privcmd_mmap_entry_t entries[],
-                            int nentries)
+static void *linux_privcmd_map_foreign_ranges(xc_interface *xch, xc_osdep_handle h,
+                                              uint32_t dom, size_t size, int prot,
+                                              size_t chunksize, privcmd_mmap_entry_t entries[],
+                                              int nentries)
 {
     xen_pfn_t *arr;
     int num_per_entry;
@@ -337,6 +338,7 @@ static struct xc_osdep_ops linux_privcmd_ops = {
         .map_foreign_batch = &linux_privcmd_map_foreign_batch,
         .map_foreign_bulk = &linux_privcmd_map_foreign_bulk,
         .map_foreign_range = &linux_privcmd_map_foreign_range,
+        .map_foreign_ranges = &linux_privcmd_map_foreign_ranges,
     },
 };
 
index 83b5e324ecba9676974704bd8ef0a020d2089e06..942fa7b262275d468defecd0dbef8a80f26382e9 100644 (file)
@@ -152,9 +152,10 @@ static void *minios_privcmd_map_foreign_range(xc_interface *xch, xc_osdep_handle
     return map_frames_ex(&mfn, size / getpagesize(), 0, 1, 1, dom, NULL, pt_prot);
 }
 
-void *xc_map_foreign_ranges(xc_interface *xch, uint32_t dom,
-                            size_t size, int prot, size_t chunksize,
-                            privcmd_mmap_entry_t entries[], int nentries)
+static void *minios_privcmd_map_foreign_ranges(xc_interface *xch, xc_osdep_handle h,
+                                               uint32_t dom,
+                                               size_t size, int prot, size_t chunksize,
+                                               privcmd_mmap_entry_t entries[], int nentries)
 {
     unsigned long *mfns;
     int i, j, n;
@@ -192,6 +193,7 @@ static struct xc_osdep_ops minios_privcmd_ops = {
         .map_foreign_batch = &minios_privcmd_map_foreign_batch,
         .map_foreign_bulk = &minios_privcmd_map_foreign_bulk,
         .map_foreign_range = &minios_privcmd_map_foreign_range,
+        .map_foreign_ranges = &minios_privcmd_map_foreign_ranges,
     },
 };
 
index 00f4ffc2a347238f81bd2be40a9bdc229250a890..7c60104e4f6ccb54d7659cdebb737d28404da46a 100644 (file)
@@ -140,10 +140,12 @@ static void *netbsd_privcmd_map_foreign_range(xc_interface *xch, xc_osdep_handle
     return addr;
 }
 
-void *xc_map_foreign_ranges(xc_interface *xch, uint32_t dom,
-                            size_t size, int prot, size_t chunksize,
-                            privcmd_mmap_entry_t entries[], int nentries)
+static void *netbsd_privcmd_map_foreign_ranges(xc_interface *xch, xc_osdep_handle h,
+                                               uint32_t dom,
+                                               size_t size, int prot, size_t chunksize,
+                                               privcmd_mmap_entry_t entries[], int nentries)
 {
+    int fd = (int)h;
        privcmd_mmap_t ioctlx;
        int i, rc;
        void *addr;
@@ -161,7 +163,7 @@ void *xc_map_foreign_ranges(xc_interface *xch, uint32_t dom,
        ioctlx.dom   = dom;
        ioctlx.entry = entries;
 
-       rc = ioctl(xch->fd, IOCTL_PRIVCMD_MMAP, &ioctlx);
+       rc = ioctl(fd, IOCTL_PRIVCMD_MMAP, &ioctlx);
        if (rc)
                goto ioctl_failed;
 
@@ -186,6 +188,7 @@ static struct xc_osdep_ops netbsd_privcmd_ops = {
         .map_foreign_batch = &netbsd_privcmd_map_foreign_batch,
         .map_foreign_bulk = &xc_map_foreign_bulk_compat,
         .map_foreign_range = &netbsd_privcmd_map_foreign_range,
+        .map_foreign_ranges = &netbsd_privcmd_map_foreign_ranges,
     },
 };
 
index d9af863c6e913e771740bb502d02ce59b4ea6501..3867e8960a1b59b4e5ce04294d490bbd15f6205a 100644 (file)
@@ -130,15 +130,17 @@ static void *xc_map_foreign_range(xc_interface *xch, xc_osdep_handle h,
     return addr;
 }
 
-void *xc_map_foreign_ranges(xc_interface *xch, uint32_t dom,
-                            size_t size, int prot, size_t chunksize,
-                            privcmd_mmap_entry_t entries[], int nentries)
+static void *solaric_privcmd_map_foreign_ranges(xc_interface *xch, xc_osdep_handle h,
+                                                uint32_t dom,
+                                                size_t size, int prot, size_t chunksize,
+                                                privcmd_mmap_entry_t entries[], int nentries)
 {
+    int fd = (int)fd;
     privcmd_mmap_t ioctlx;
     int i, rc;
     void *addr;
 
-    addr = mmap(NULL, size, prot, MAP_SHARED, xch->fd, 0);
+    addr = mmap(NULL, size, prot, MAP_SHARED, fd, 0);
     if (addr == MAP_FAILED)
         goto mmap_failed;
 
@@ -151,7 +153,7 @@ void *xc_map_foreign_ranges(xc_interface *xch, uint32_t dom,
     ioctlx.dom   = dom;
     ioctlx.entry = entries;
 
-    rc = ioctl(xch->fd, IOCTL_PRIVCMD_MMAP, &ioctlx);
+    rc = ioctl(fd, IOCTL_PRIVCMD_MMAP, &ioctlx);
     if (rc)
         goto ioctl_failed;
 
@@ -176,6 +178,7 @@ static struct xc_osdep_ops solaris_privcmd_ops = {
         .map_foreign_batch = &solaris_privcmd_map_foreign_batch,
         .map_foreign_bulk = &xc_map_foreign_bulk_compat,
         .map_foreign_range = &solaris_privcmd_map_foreign_range,
+        .map_foreign_ranges = &solaris_privcmd_map_foreign_ranges,
     },
 };
 
index eadbbc0808487309a2b36d648c460e955c38e779..5f93b7361dafd6c8a53b88cac489482b7e9ab78c 100644 (file)
@@ -70,6 +70,9 @@ struct xc_osdep_ops
                                       const xen_pfn_t *arr, int *err, unsigned int num);
             void *(*map_foreign_range)(xc_interface *xch, xc_osdep_handle h, uint32_t dom, int size, int prot,
                                        unsigned long mfn);
+            void *(*map_foreign_ranges)(xc_interface *xch, xc_osdep_handle h, uint32_t dom, size_t size, int prot,
+                                        size_t chunksize, privcmd_mmap_entry_t entries[],
+                                        int nentries);
         } privcmd;
     } u;
 };